Page source: |
1: $website.include("options")
2: #set ($options = $request.getAttribute("options"))
3:
4: #set ($rosterLayout = "list")
5: #set ($showHeadshotView = false)
6: #set ($isArchivePage = false)
7:
8: #if ($options.get("roster_show_headshot_view") == true)
9: #set ($showHeadshotView = true)
10:
11: #foreach ($cookie in $request.cookies)
12: #if ($cookie.name == "roster_view")
13: #set ($rosterLayout = $cookie.value)
14: #end
15: #end
16: #end
17:
18: #if ($options.get("roster_default_view"))
19: #set ($rosterLayout = $options.get("roster_default_view"))
20: #end
21:
22: #if ($request.getParameter("view"))
23: #set ($view = $request.getParameter("view"))
24: #if ($view == "list" || $view == "headshot")
25: #set ($rosterLayout = $view)
26: #end
27: #end
28:
29: #set ($rosterFields = ["number","first_name: :last_name","position","year","height","weight","hometown:/:highschool"])
30: #set ($rosterLabels = ["#","Name","Pos.","Cl.","Ht.","Wt.","Hometown/High School"])
31: #set ($rosterSortables = ["number","last_name","year","position"])
32:
33: #if ($options.get("roster_fields") && $options.get("roster_labels"))
34: #set ($rosterFieldsString = $options.get("roster_fields"))
35: #set ($rosterLabelsString = $options.get("roster_labels"))
36:
37: #set ($rosterFieldsString = $rosterFieldsString.split(","))
38: #set ($rosterLabelsString = $rosterLabelsString.split(","))
39:
40: #set ($rosterFieldsSize = $tool.list.size($rosterFieldsString))
41: #set ($rosterLabelsSize = $tool.list.size($rosterLabelsString))
42:
43: #if ($rosterFieldsSize > 0 && $rosterLabelsSize > 0 && $rosterFieldsSize == $rosterLabelsSize)
44: #set ($rosterFields = $rosterFieldsString)
45: #set ($rosterLabels = $rosterLabelsString)
46: #end
47: #end
48:
49: #if ($request.getParameter("sort").length() > 0) ## when sort param is available, force the list layout
50: #set ($rosterLayout = "list")
51: #end
52:
53: #macro (printFieldValue $field $defaultValue)
54: #set ($fieldValue = "")
55: #if ($field.contains(">"))
56: #set ($orderedFields = $field.split(">"))
57: #foreach ($orderedField in $orderedFields)
58: #set ($orderedField = $orderedField.trim())
59: #if ($bio.get($orderedField) && $fieldValue.length() == 0)
60: #set ($fieldValue = $bio.get($orderedField))
61: #end
62: #end
63: #else
64: #if ($bio.get($field))
65: #set ($fieldValue = $bio.get($field))
66: #end
67: #end
68: #if ($fieldValue.length() > 0)
69: $fieldValue
70: #else
71: $defaultValue
72: #end
73: #end
74:
75: #macro (printField $field)
76: #set ($splitter = "")
77: #if ($field.contains(": :")) ## multipart fields separated by a space
78: #set ($splitter = ": :")
79: #elseif ($field.contains(":/:")) ## multipart fields separated by a /
80: #set ($splitter = ":/:")
81: #end
82:
83: #if ($splitter.length() > 0)
84: #set ($multipartField = $field.split($splitter))
85: #foreach ($fieldPart in $multipartField)
86: #set ($fieldPart = $fieldPart.trim())
87: #if ($velocityCount > 1)
88: $splitter.charAt(1)
89: #end
90: #printFieldValue($fieldPart "")
91: #end
92: #else
93: #printFieldValue($field " ")
94: #end
95: #end
96:
97: #macro (printPlayerAriaLabel $bioinfo)
98: #set ($jerseyNumber = "")
99: #set ($bio = $bioinfo.getDataAsObject().getAttributes())
100: #if ($bio.get("full_name").length() > 0)
101: #set ($fullName = $bio.get("full_name"))
102: #else
103: #set ($firstName = $bio.get("first_name"))
104: #set ($lastName = $bio.get("last_name"))
105: #set ($fullName = "${firstName} ${lastName}")
106: #end
107: #if ($bio.get("number").length() > 0)
108: #set ($jerseyNumber = "jersey number ${bio.get('number')}")
109: #end
110: aria-label="${fullName}: ${jerseyNumber}: full bio"
111: #end
112:
113: #macro (printHeadshot $bioinfo $class)
114: #set ($bio = $bioinfo.getDataAsObject().getAttributes())
115: #set ($alt = "${bio.get('first_name')} ${bio.get('last_name')} bio photo")
116:
117: #if ($bioinfo.publishedHeadshots.size() > 0)
118: #set ($src = $bioinfo.publishedHeadshots.get(0).url)
119: #elseif ($website.exists("/images/setup/default-headshot.png"))
120: #set ($src = "/images/setup/default-headshot.png")
121: #elseif ($website.exists("/images/setup/headshot_default.jpg"))
122: #set ($src = "/images/setup/headshot_default.jpg")
123: #else
124: #set ($src = "/info/images/default-headshot.png")
125: #end
126:
127: #set ($src = "${src}?max_height=576&max_width=576&crop=1")
128: <img class="img-fluid ${class}" src="${src}" alt="${alt}" tabindex="0" />
129: #end ## macro printHeadshot
130:
131: #macro (printHeadshotBg $bioinfo)
132: #set ($bio = $bioinfo.getDataAsObject().getAttributes())
133: #if ($bioinfo.publishedHeadshots.size() > 0)
134: #set ($src = $bioinfo.publishedHeadshots.get(0).url)
135: #elseif ($website.exists("/images/setup/default-headshot.png"))
136: #set ($src = "/images/setup/default-headshot.png")
137: #elseif ($website.exists("/images/setup/headshot_default.jpg"))
138: #set ($src = "/images/setup/headshot_default.jpg")
139: #else
140: #set ($src = "/info/images/default-headshot.png")
141: #end
142: #set ($src = "${src}?max_height=576&max_width=576&crop=1")
143: <div class="ratio ratio-1x1 d-block">
144: <div style="background-image:url('${src}'); background-position:top center; background-size:cover;"></div>
145: </div>
146: #end ## macro printHeadshotBg
147:
148:
149: #macro (printBannerImage)
150: #if ($page.thumbnailURL)
151: #set ($rosterThumbSize = 1920)
152: #if ($tool.math.toInteger($options.get("roster_thumb_size")))
153: #set ($rosterThumbSize = $tool.math.toInteger($options.get("roster_thumb_size")))
154: #end
155: <div class="roster-banner-img text-center">
156: <picture alt="${page.thumbnailPage.altText}">
157: <source media="(min-width:1200px)" srcset="${page.thumbnailURL}?max_width=1920">
158: <source media="(min-width:992px)" srcset="${page.thumbnailURL}?max_width=1199">
159: <source media="(min-width:578px)" srcset="${page.thumbnailURL}?max_width=991">
160: <source media="(min-width:0px)" srcset="${page.thumbnailURL}?max_width=576">
161: <img class="img-fluid mx-auto" src="${page.thumbnailURL}?max_width=${rosterThumbSize}" alt="${page.thumbnailPage.altText}"/>
162: </picture>
163: </div>
164: #end
165: #end
166:
167: #macro (printArchiveList)
168: #if ($options.get("archive_roster"))
169: #set ($id = "roster-archive-switcher")
170: #if ($request.getParameter("id").length() > 0)
171: #set ($id = $request.getParameter("id"))
172: #end
173:
174: #set ($archiveRosterString = $options.get("archive_roster"))
175: #set ($archiveRosterString = $archiveRosterString.split(","))
176: #set ($isArchivePage = false)
177: #if ($tool.list.size($archiveRosterString) > 0)
178:
179: <div id="${id}" class="archive-roster-switcher-template float-end">
180: <div class="input-group">
181: <span class="input-group-text" for="${id-options}-group-text">Archive Rosters</span>
182: <select class="form-select" id="${id}-options" aria-describedby="${id-options}-group-text" onchange="location=this.value;" aria-label="Change the season by selecting an option from the list below">
183: #foreach ($string in $archiveRosterString)
184: #set ($archiveRoster = $string.split(":"))
185: #if ($tool.list.size($archiveRoster) == 2)
186: #set ($archiveUrl = $tool.list.get($archiveRoster, 0).trim())
187: #set ($archiveLabel = $tool.list.get($archiveRoster, 1).trim())
188: #if ($archiveUrl != $page.url)
189: <option value="$archiveUrl" data-url="$archiveUrl" data-title="$archiveLabel">$archiveLabel</option>
190: #else
191: <option value="$archiveUrl" data-url="$archiveUrl" data-title="$archiveLabel" selected>$archiveLabel</option>
192: #set ($isArchivePage = true)
193: #end
194: #end
195: #end
196: </select>
197: </div>
198: </div>
199: #end
200: #end
201: #end ## macro printArchiveList
202:
203: #macro (printCoachesJump)
204: <p class="d-print-none">
205: <a href="#coaching-staff">View Coaching Staff</a>
206: </p>
207: #end
208:
209: #macro (printViewButtons)
210: #if ($showHeadshotView)
211: <div class="btn-group btn-group-toggle" role="group" data-bs-toggle="buttons">
212: <a class="roster-view btn btn-outline-secondary #if($rosterLayout == 'list') active #end" data-view="list" href="$page.url?view=list">
213: <span class="fas fa-list" aria-hidden="true"></span>
214: <span class="sr-only">List View</span>
215: </a>
216: <a class="roster-view btn btn-outline-secondary #if($rosterLayout == 'headshot') active #end" data-view="headshot" href="$page.url?view=headshot">
217: <span class="fas fa-user" aria-hidden="true"></span>
218: <span class="sr-only">Headshot View</span>
219: </a>
220: </div>
221: #end
222: #end ## macro printViewButtons
223:
224: #set ($socialBrands = ["facebook", "twitter", "instagram", "youtube", "twitch", "tiktok"])
225:
226: #macro (buildSocialLink $brand $handle $icons $class)
227: #if($brand == "facebook")
228: #set($socialHost = "https://www.facebook.com")
229: #elseif($brand == "twitter")
230: #set($socialHost = "https://twitter.com")
231: #elseif($brand == "instagram")
232: #set($socialHost = "https://www.instagram.com")
233: #elseif($brand == "tikTok")
234: #set($socialHost = "https://www.tiktok.com")
235: #elseif($brand == "twitch")
236: #set($socialHost = "https://www.twitch.tv")
237: #elseif($brand == "youtube")
238: #set($socialHost = "https://www.youtube.com")
239: #end
240:
241: #if($socialHost.length() > 0 )
242: #set($url = "${socialHost}/${handle}")
243: #else
244: #set($url = "")
245: #end
246:
247: #set($icons = $Boolean.parseBoolean($icons))
248: #if($icons == true)
249: <a href="$url" class="$class" target="_blank"><span aria-label="$brand" class="fa fa-brands #if($brand == 'twitter') fa-x-twitter #else fa-$brand.toLowerCase() #end"></span></a>
250: #else
251: <a href="$url" class="$class" target="_blank">$handle</a>
252: #end
253: #end
254:
255:
256: #macro (printListLayout)
257: #set ($rosterFields = ["number","first_name: :last_name","position","year","height","weight","hometown:/:highschool"])
258: #set ($rosterLabels = ["#","Name","Pos.","Cl.","Ht.","Wt.","Hometown/High School"])
259: #set ($rosterSortables = ["number","last_name","year","position"])
260:
261: #if ($options.get("roster_fields") && $options.get("roster_labels"))
262: #set ($rosterFieldsString = $options.get("roster_fields"))
263: #set ($rosterLabelsString = $options.get("roster_labels"))
264:
265: #set ($rosterFieldsString = $rosterFieldsString.split(","))
266: #set ($rosterLabelsString = $rosterLabelsString.split(","))
267:
268: #set ($rosterFieldsSize = $tool.list.size($rosterFieldsString))
269: #set ($rosterLabelsSize = $tool.list.size($rosterLabelsString))
270:
271: #if ($rosterFieldsSize > 0 && $rosterLabelsSize > 0 && $rosterFieldsSize == $rosterLabelsSize)
272: #set ($rosterFields = $rosterFieldsString)
273: #set ($rosterLabels = $rosterLabelsString)
274: #end
275: #end
276:
277: #if ($options.get("roster_sortable"))
278: #set ($rosterSortablesString = $options.get("roster_sortable"))
279: #set ($rosterSortables = $rosterSortablesString.split(","))
280: #end
281:
282: #set ($sortBy = "number")
283: #if($formatter.escapeXml($request.getParameter("sort")).length() > 0)
284: #set($sortBy = $formatter.escapeXml($request.getParameter("sort")))
285: #end
286: #if ($sortBy.length() > 0)
287: #set ($headlines = $headlines.sortedBy($sortBy))
288: #end
289:
290: <div class="table-responsive">
291: <table class="table table-hover align-middle">
292: <thead class="thead-dark">
293: <tr>
294: #foreach($field in $rosterFields)
295: #set ($fieldLabel = $tool.list.get($rosterLabels, $tool.math.sub($velocityCount, 1)))
296: #set ($isSortable = false)
297: #set ($sortableField = "")
298:
299: #if ($tool.list.size($rosterSortables) > 0)
300: #foreach ($sortable in $rosterSortables)
301: #if ($field.contains($sortable))
302: #set ($isSortable = true)
303: #set ($sortableField = $sortable)
304: #end
305: #end
306: #end
307:
308: #set ($ariaLabelColumn = $sortableField)
309: #if ($sortableField.contains('custom'))
310: #set ($ariaLabelColumn = $fieldLabel)
311: #end
312:
313: #set ($width = "")
314: #set ($align = "")
315: #if ($fieldLabel.equals('No.') || $fieldLabel.equals('#') || $fieldLabel.equals('Pos.') || $fieldLabel.equals('Cl.') || $fieldLabel.equals('Ht.') || $fieldLabel.equals('Wt.'))
316: #set ($width = "w-1")
317: #set ($align = "text-center")
318: #end
319:
320: <th scope="col" class="text-nowrap uppercase ${width} ${align} col${velocityCount} #if($isSortable)sortable #end #if($sortBy == $sortableField) sorted table-active #end">
321: #if ($isSortable)
322: <a href="$page.url?sort=${sortableField}" title="Sort using this column" class="sortable text-reset" role="button" >${fieldLabel}</a>
323: #else
324: $fieldLabel
325: #end
326: </th>
327: #end
328: </tr>
329: </thead>
330: <tbody>
331: #foreach ($bioinfo in $headlines)
332: #set ($bio = $bioinfo.getDataAsObject().getAttributes())
333: <tr>
334: #foreach($field in $rosterFields)
335: #set ($dataLabel = $tool.list.get($rosterLabels, $tool.math.sub($velocityCount, 1)))
336: #set ($isSortable = false)
337: #set ($sortableField = "")
338:
339: #if ($tool.list.size($rosterSortables) > 0)
340: #foreach ($sortable in $rosterSortables)
341: #if ($field.contains($sortable))
342: #set ($isSortable = true)
343: #set ($sortableField = $sortable)
344: #end
345: #end
346: #end
347:
348: #set ($width = "")
349: #set ($align = "")
350: #if ($dataLabel.equals('No.') || $dataLabel.equals('#') || $dataLabel.equals('Pos.') || $dataLabel.equals('Cl.') || $dataLabel.equals('Ht.') || $dataLabel.equals('Wt.'))
351: #set ($align = "text-center")
352: #end
353:
354: #if ($field.contains("first_name") || $field.contains("last_name") || $field.contains("full_name"))
355: <th scope="row" class="text-inherit ${align} #if($sortBy == $sortableField) sorted table-active #end" data-label="${dataLabel}">
356: <div class="d-flex align-items-center justify-content-start gap-2">
357: <div class="player-image position-relative overflow-hidden">
358: #printHeadshot($bioinfo "img-mw-3 img-mh-3")
359: </div>
360: <div class="w-100">
361: <a #printPlayerAriaLabel($bioinfo) href="$bioinfo.url">#printField($field)</a>
362: <div class="social-links-inline d-inline-block ml-2 ms-2">
363: <ul class="d-flex d-flex justify-content-between align-items-center p-0 m-0 gap-0" tabindex="0">
364: #foreach ($brand in $socialBrands)
365: #if ($bio.get("$brand").length())
366: #set($link = $bio.get("$brand"))
367: <li class="d-flex justify-content-between align-items-center flex-column">
368: #buildSocialLink($brand.toLowerCase(), $link, true, "fs-sm small p-1")
369: </li>
370: #end
371: #end
372: </ul>
373: </div>
374: </div>
375: </div>
376:
377: </th>
378: #else
379: #if ($dataLabel.equals("Pos.") || $dataLabel.equals("Num.") || $dataLabel.equals("Wt.") || $dataLabel.equals("Ht.") || $dataLabel.equals("Cl.") || $dataLabel.equals("B/T"))
380: #set ($textWrapClass = "text-nowrap")
381: #else
382: #set ($textWrapClass = "text-inherit")
383: #end
384: <td class="$textWrapClass ${align} #if ($dataLabel.equals('No.') || $dataLabel.equals('#')) jersey-number #end #if($sortBy == $sortableField) sorted table-active #end" data-label="${dataLabel}">
385: #if($dataLabel != "#" && $dataLabel !="No.")
386: <span class="label fw-bold d-md-none">${dataLabel}:</span>
387: #end
388:
389: #if ($field.contains("email_address"))
390: <a href="mailto:${bio.get("email_address")}">#printField($field)</a>
391: #else
392: #printField($field)
393: #end
394: </td>
395: #end
396: #end
397: </tr>
398: #end
399: </tbody>
400: </table>
401: </div>
402: #end ## macro printListLayout
403:
404: #macro (printHeadshotLayout)
405: #set ($headshotSize = "medium")
406: #if ($options.get("roster_headshot_size"))
407: #set ($headshotSize = $options.get("roster_headshot_size"))
408: #end
409:
410: <div class="roster-headshot-container">
411: <div class="row player-cards g-3 position-relative headshot-size-${headshotSize}">
412: #foreach ($bioinfo in $headlines)
413: #if($headshotSize == "large")
414: #set ($cardClass = "col-12 col-sm-6 col-md-4 col-lg-4")
415: #elseif($headshotSize == "medium")
416: #set ($cardClass = "col-12 col-sm-6 col-md-4 col-lg-3")
417: #elseif($headshotSize == "small")
418: #set ($cardClass = "col-12 col-sm-6 col-md-4 col-lg-2")
419: #end
420:
421: #set ($bio = $bioinfo.getDataAsObject().getAttributes())
422: <div class="player-card-wrapper ${cardClass} d-flex align-items-stretch position-relative">
423: <div class="player-card card shadow w-100">
424: <div #printPlayerAriaLabel($bioinfo) class="card-front card-data w-100 h-100 bg-white rounded d-flex flex-column align-items-center justify-content-between">
425: <div class="player-image position-relative w-100 overflow-hidden">
426: #printHeadshotBg($bioinfo)
427: </div>
428: <div class="player-card-footer p-3 d-flex justify-content-between align-items-center flex-grow w-100 position-relative">
429: <div class="vm-btn btn btn-sm btn-secondary overflow-hidden position-absolute fw-bold z-index-1 lh-base" style="line-height:initial;"><span class="fa fa-ellipsis-v"></span><span class="sr-only visually-hidden">View More</span></div>
430:
431: #if ($bio.get("first_name") && $bio.get("last_name"))
432: <a href="$bioinfo.url" class="text-decoration-none flex-fill">
433: <span class="name">
434: <span class="firstname text-truncate d-block fs-6">$bio.get("first_name")</span>
435: <span class="lastname text-truncate d-block fs-5">$bio.get("last_name")#if($bio.get("year").length() > 0) - $bio.get("year")#end</span>
436: </span>
437: </a>
438: #end
439: <ul class="d-flex d-flex justify-content-between align-items-center p-0 m-0 gap-2" tabindex="0">
440: #foreach ($brand in $socialBrands)
441: #if ($bio.get("$brand").length())
442: #set($link = $bio.get("$brand"))
443: <li class="d-flex justify-content-between align-items-center flex-column">
444: #buildSocialLink($brand.toLowerCase(), $link, true, "")
445: </li>
446: #end
447: #end
448: </ul>
449:
450: #if ($bio.get("number") && $!bio.get("number").length() > 0)
451: <span class="number fw-bold position-relative float-end text-center text-white" tabindex="-1" aria-label="Jersey Number $bio.get('number')">$bio.get("number")</span>
452: #end
453: </div>
454: </div>
455: <div class="player-short-bio card-back card-data w-100 h-100 overflow-hidden p-3 position-absolute" >
456: <div class="bio-content d-flex flex-column gap-3 h-100">
457: <div class="card-back-head pb-3">
458: #if ($bio.get("first_name") && $bio.get("last_name"))
459: <div class="name d-flex align-items-center justify-content-start gap-3 p-0">
460: <div class="pl-profile w-25 h-100">
461: #printHeadshot($bioinfo "w-100")
462: </div>
463: <div class="pl-name-wrap d-flex flex-column gap-2">
464: #if ($bio.get("number") && $!bio.get("number").length() > 0)
465: <span class="number fw-bold fs-5 nowrap">#$bio.get("number")</span>
466: #end
467: <div class="pl-name text-decoration-none mt-0">
468: <span class="firstname text-truncate d-block fs-6">$bio.get("first_name")</span>
469: <span class="lastname text-truncate d-block fs-5">$bio.get("last_name")</span>
470: </div>
471: </div>
472: </div>
473: #end
474: <span class="close position-absolute btn btn-sm btn-link">
475: <span class="fa fa-close fa-times" aria-hidden="true"></span>
476: <span class="visually-hidden">Close</span>
477: </span>
478: </div>
479: <div class="bio-data">
480: <ul class="list-unstyled small">
481: #if ($bio.get("year").length() > 0)
482: <li tabindex="0" class="p-0 m-0"><span class="fw-bold">Class:</span> $bio.get("year")</li>
483: #end
484: #if ($bio.get("height").length() > 0)
485: <li tabindex="0" class="p-0 m-0"><span class="fw-bold">Height:</span> $bio.get("height")</li>
486: #end
487: #if ($bio.get("bats_throws").length() > 0)
488: <li tabindex="0" class="p-0 m-0"><span class="fw-bold">B/T:</span> $bio.get("bats_throws")</li>
489: #end
490: #if ($bio.get("position").length() > 0)
491: <li tabindex="0" class="p-0 m-0"><span class="fw-bold">Position:</span> $bio.get("position")</li>
492: #end
493: #if ($bio.get("hometown").length() > 0)
494: <li tabindex="0" class="p-0 m-0"><span class="fw-bold">Hometown:</span> $bio.get("hometown")</li>
495: #end
496: #if ($bio.get("highschool").length() > 0)
497: <li tabindex="0" class="p-0 m-0"><span class="fw-bold">Highschool:</span> $bio.get("highschool")</li>
498: #end
499: <li tabindex="0" class="p-0 m-0">
500: <ul class="list-group list-group-horizontal p-0 mt-2" tabindex="0">
501: #foreach ($brand in $socialBrands)
502: #if ($bio.get("$brand").length())
503: #set($link = $bio.get("$brand"))
504: <li class="list-group-item p-2">
505: #buildSocialLink($brand.toLowerCase(), $link, true, "")
506: </li>
507: #end
508: #end
509: </ul>
510: </li>
511: </ul>
512: </div>
513: <a href="$bioinfo.url" class="btn btn-primary full-bio fw-bold btn-block text-center overflow-hidden">Full Bio</a>
514: </div>
515: </div>
516: </div>
517: </div>
518: #end
519: </div>
520: </div>
521: #end ## macro printHeadshotLayout
522:
523: #if ($request.getParameter("ajax").length() > 0)
524:
525: #if ($rosterLayout == "list")
526: #printListLayout
527: #elseif ($rosterLayout == "headshot")
528: #printHeadshotLayout
529: #end
530:
531: $website.decorate("")
532:
533: #else
534: <div class="page-content roster-content" data-module="bs-scripts/roster-layout" data-page-url="$page.url" data-page-title="$!page.title - ${website.profile.siteName}">
535:
536: ## USED TO CREATE COACHES LIST AT BOTTOM OF THE PAGE AND TO CREATE JUMP LINK AT THE TOP
537: #set($showCoaches = false)
538: #if ($!options.get("roster_show_coaches") != "false" )
539: #if ($request.getRequestURI().split("/").size() > 2 && $request.getRequestURI().split("/").get(1) == "sports")
540: #set($sport_directory = $request.getRequestURI().split("/").get(1))
541: #set($sport_type = $request.getRequestURI().split("/").get(2))
542: #set($sport_season = $request.getRequestURI().split("/").get(3))
543: #set($coaches_url = "/${sport_directory}/${sport_type}/coaches/index")
544:
545: #if ($website.exists($coaches_url) && $request.getRequestURI().contains("roster"))
546: #set($showCoaches = true)
547: #set($coaches_heading = "Coaching Staff")
548: $website.includeAgain("sport-labels")
549: #set ($sportLabels = $!request.getAttribute("sportLabels"))
550: #if ($sportLabels.containsKey($sport_type))
551: #set ($sport = $sportLabels.get($sport_type))
552: ## #set($coaches_heading = "${sport} Coaching Staff")
553: #set($coaches_heading = "Coaching Staff")
554: #end
555: #end
556: #end
557: #end
558:
559: ## END OF NEW COACHES LIST INCLUDE
560:
561: #set ($pageTitle = "Roster")
562: #if ($page.title.length() > 0)
563: #set ($pageTitle = $page.title)
564: #end
565: #if ($page.title.length() > 0)
566: <h1 class="page-heading">$pageTitle</h1>
567: #end
568: $!request.setAttribute("pageTitle", "${pageTitle}")
569: $!request.setAttribute("pageDescription", "The official $pageDescription")
570:
571: #printBannerImage
572:
573: <div class="filters d-flex flex-column flex-md-row justify-content-between py-3 border-top border-bottom gap-3 my-3">
574: <div class="flex-fill d-flex justify-content-between gap-3">
575: <div role="group" aria-label="Print friendly version">
576: <a href="${page.url}?dec=printer-decorator" class="btn btn-outline-secondary"><span class="fa fa-print"></span> Print</a>
577: </div>
578:
579: #printViewButtons
580: </div>
581:
582: $!request.setAttribute("pageObj", $page)
583: <div class="flex-fill">
584: $website.include("conf-season-filter-template")
585: </div>
586:
587: ##printArchiveList
588: </div>
589:
590: ## checks if the attribute was set by the season vilter builder script.
591: ## the location of this conditional should always be placed after the season filter include has been made.
592: #set ($currentSeason = $!request.getAttribute("current_season"))
593: #if (!$page.url.contains("${currentSeason}"))
594: #set ($isArchivePage = true)
595: #end
596:
597: #if($showCoaches == true && $isArchivePage == false)
598: #printCoachesJump
599: #end
600:
601: #if ($rosterLayout == "list")
602:
603: #if ($options.get("roster_sortable"))
604: #set ($rosterSortablesString = $options.get("roster_sortable"))
605: #set ($rosterSortables = $rosterSortablesString.split(","))
606: #end
607:
608: #set ($sortBy = "")
609: #set($sortBy = $request.getParameter("sort"))
610: #if ($sortBy.length() > 0)
611: #set ($headlines = $headlines.sortedBy($sortBy))
612: #end
613:
614: <div class="roster-data style-list">#printListLayout</div>
615:
616: #elseif ($rosterLayout == "headshot")
617: <div class="roster-data style-headshot">#printHeadshotLayout</div>
618:
619: #end ## roster-layout
620:
621: #set ($rosterFooter = "${page.url}-footer")
622: #if ($website.exists($rosterFooter))
623: <div class="roster-footer" data-fetch="$rosterFooter">$website.include($rosterFooter)</div>
624: #end
625:
626: #if ($showCoaches == true && $isArchivePage == false)
627: <h2 class="invisible d-none">Coaching Staff</h2>
628: <h3 class="mt-5" id="coaching-staff">${coaches_heading}</h3>
629: <div class="roster-coaches" data-coaches-url="${coaches_url}">$website.includeAgain("${coaches_url}?tmpl=headlines-coaches-template&ajax=true")</div>
630: #end
631:
632:
633: </div> ## page-content
634:
635: ## GLOBAL ADS SERVER
636: #if ($website.ads.isAdvertisingEnabled('ROSTER'))
637: $website.includeAgain("global-adserver-slots?adSlot=roster")
638: #end
639:
640: #end ## if ajax
641:
642: <script type="text/javascript">
643: $(".vm-btn").click(function(e){
644: e.preventDefault();
645: $('.player-card.flipped').removeClass('flipped');
646: $(this).closest('.player-card').addClass('flipped');
647: e.stopPropagation();
648: });
649:
650: $(document).on("click", function(e) {
651: if ($(e.target).is(".player-card") === false) {
652: $(".player-card").removeClass("flipped");
653: }
654: });
655:
656: $(".card-back .close").click(function(){
657: $(".player-card").removeClass("flipped");
658: });
659: </script>
|